namespace WeifenLuo.WinFormsUI.Docking
{
    using System;
    using System.Drawing;
    using System.Windows.Forms;

    public interface IDockContent
    {
        #region Properties

        DockContentHandler DockHandler
        {
            get;
        }

        #endregion Properties

        #region Methods

        void OnActivated(EventArgs e);

        void OnDeactivate(EventArgs e);

        #endregion Methods
    }

    public interface INestedPanesContainer
    {
        #region Properties

        Rectangle DisplayingRectangle
        {
            get;
        }

        DockState DockState
        {
            get;
        }

        bool IsFloat
        {
            get;
        }

        NestedPaneCollection NestedPanes
        {
            get;
        }

        VisibleNestedPaneCollection VisibleNestedPanes
        {
            get;
        }

        #endregion Properties
    }

    internal interface IDockDragSource : IDragSource
    {
        #region Methods

        Rectangle BeginDrag(Point ptMouse);

        bool CanDockTo(DockPane pane);

        void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex);

        void DockTo(DockPanel panel, DockStyle dockStyle);

        void FloatAt(Rectangle floatWindowBounds);

        bool IsDockStateValid(DockState dockState);

        #endregion Methods
    }

    internal interface IDragSource
    {
        #region Properties

        Control DragControl
        {
            get;
        }

        #endregion Properties
    }

    internal interface ISplitterDragSource : IDragSource
    {
        #region Properties

        Rectangle DragLimitBounds
        {
            get;
        }

        bool IsVertical
        {
            get;
        }

        #endregion Properties

        #region Methods

        void BeginDrag(Rectangle rectSplitter);

        void EndDrag();

        void MoveSplitter(int offset);

        #endregion Methods
    }
}